#include <thrust/graph/adjacency_list.hpp>
#include <thrust/graph/random.hpp>
#include <thrust/graph/simple_io.hpp>

#include <thrust/copy.h>
using namespace thrust;

#include <iostream>
using namespace std;

int
main()
{
  typedef no_property VertexProperty;
  typedef property<edge_weight_t,float> EdgeProperty;
  typedef adjacency_list<directedS,disallow_parallelS
    ,VertexProperty,EdgeProperty
    > graph_t;
  
  typedef graph_traits<graph_t>::vertex_iterator vertex_iterator;
  typedef graph_traits<graph_t>::vertex_descriptor vertex_descriptor;
  
  typedef graph_traits<graph_t>::edge_iterator edge_iterator;  
  typedef graph_traits<graph_t>::edge_descriptor edge_descriptor;

  //unsigned int N =100000;
  //unsigned int M =10000000;

  //unsigned int N =8;
  //unsigned int M =10;
  unsigned int N =100;
  unsigned int M =1000;

  graph_t g( N, M);

  // minstd_rand = default_rand_engine
  // linear_congruential_engine<thrust::detail::uint32_t, 48271, 0, 2147483647> = minstd_rand;
  typedef thrust::random::default_random_engine  gen;
  
  
  unsigned int seed =20000;
  thrust::generate_random_graph<gen>( g, N, M, false, false, seed);
  
  std::cout <<g <<std::endl;
  
  return 0;
}
